home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 031-040 / amok32 / ringbuffers / syncdemo.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  105 lines

  1. (**********************************************************************
  2.  
  3.     :Program.    SyncDemo.mod
  4.     :Contents.   Zeigt die Häufigkeit von einzelnen Zeichen einer Datei an
  5.     :Remark.     Gegenbeispiel zu "MultitaskDemo"
  6.     :Author.     Nicolas Benezan [bne]
  7.     :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
  8.     :Phone.      711/333679
  9.     :Copyright.  Public Domain
  10.     :Language.   Modula-2
  11.     :Translator. M2Amiga A+L V3.27d
  12.     :Imports.    BackDrop [Bernd Preusing], TaskMemory [bne]
  13.     :History.    V1.0 [bne] 01.Jan.1990
  14.  
  15. **********************************************************************)
  16.  
  17. MODULE SyncDemo;
  18.  
  19. FROM Arguments  IMPORT GetArg, NumArgs;
  20. FROM Arts       IMPORT Assert, TermProcedure;
  21. FROM BackDrop   IMPORT BdRp, OpenBackDrop;
  22. FROM Dos        IMPORT Close, Delay, Examine, FileHandlePtr, FileInfoBlock,
  23.                        FileInfoBlockPtr, FileLockPtr, Lock, oldFile, Open,
  24.                        Read, sharedLock, UnLock;
  25. FROM Graphics   IMPORT SetAPen, WritePixel;
  26. FROM TaskMemory IMPORT Allocate, Deallocate;
  27. FROM SYSTEM     IMPORT ADR;
  28.  
  29. CONST
  30.   BufferSize = 256;
  31.   Usage = 'Usage = "SyncDemo" FileName.';
  32.  
  33. VAR
  34.   Count: ARRAY CHAR OF LONGINT;
  35.   File: FileHandlePtr;
  36.   FileName: ARRAY [0..31] OF CHAR;
  37.   Buffer: ARRAY [0..BufferSize - 1] OF CHAR;
  38.   Size, TotalSize, Position: LONGINT;
  39.   Len: INTEGER;
  40.  
  41. PROCEDURE Cleanup;
  42.   BEGIN
  43.     IF File # NIL THEN
  44.       Close (File);
  45.       File:= NIL;
  46.     END;
  47.   END Cleanup;
  48.  
  49. PROCEDURE Draw (NumChars: CARDINAL);
  50.   VAR
  51.     i: INTEGER;
  52.     Char: CHAR;
  53.     Dummy: LONGINT;
  54.   BEGIN
  55.     FOR i:= 0 TO NumChars - 1 DO
  56.       Char:= Buffer[i];
  57.       INC (Position);
  58.       SetAPen (BdRp, 3);
  59.       Dummy:= WritePixel (BdRp, Position * 640 DIV TotalSize, 0);
  60.       INC (Count[Char]);
  61.       SetAPen (BdRp, 2);
  62.       Dummy:= WritePixel (BdRp, Count[Char], ORD (Char) + 1);
  63.       SetAPen (BdRp, 1);
  64.       Dummy:= WritePixel (BdRp, Count[Char] * 640 DIV TotalSize,
  65.                           ORD (Char) + 1);
  66.     END;
  67.   END Draw;
  68.  
  69. PROCEDURE FileSize (Name: ARRAY OF CHAR): LONGINT;
  70.   VAR
  71.     FileLock: FileLockPtr;
  72.     Info: FileInfoBlockPtr;
  73.     Size: LONGINT;
  74.   BEGIN
  75.     Allocate (Info, SIZE (FileInfoBlock));
  76.     Assert (Info # NIL, ADR ("No free store"));
  77.     FileLock:= Lock (ADR (Name), sharedLock);
  78.     Assert (FileLock # NIL, ADR ("Lock() failed"));
  79.     Assert (Examine (FileLock, Info), ADR ("Examine() failed"));
  80.     Size:= Info^.size;
  81.     Deallocate (Info);
  82.     UnLock (FileLock);
  83.     RETURN Size;
  84.   END FileSize;
  85.  
  86. BEGIN
  87.   File:= NIL;
  88.   TermProcedure (Cleanup);
  89.   Assert (NumArgs () = 1, ADR (Usage));
  90.   GetArg (1, FileName, Len);
  91.   File:= Open (ADR (FileName), oldFile);
  92.   Assert (File # NIL, ADR ("File not found"));
  93.   TotalSize:= FileSize (FileName);
  94.   OpenBackDrop (2, 640, 257, ADR ("SyncDemo"));
  95.   Size:= BufferSize;
  96.   Position:= 0;
  97.   REPEAT
  98.     Size:= Read (File, ADR (Buffer), Size);
  99.     Assert (Size >= 0, ADR ("Read error"));
  100.     Draw (Size);
  101.   UNTIL Size < BufferSize;
  102.   Delay (250);
  103. END SyncDemo.
  104.  
  105.